]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Keyboard: fix timestamp handling to account for CURRENT_TIME
authorGiovanni Campagna <gcampagna@src.gnome.org>
Fri, 20 Jul 2012 13:59:53 +0000 (15:59 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Thu, 13 Sep 2012 21:48:17 +0000 (23:48 +0200)
CLUTTER_CURRENT_TIME (like GDK_CURRENT_TIME and libX11 CurrentTime) is 0,
and thus compares lower than all valid timestamps, meaning that
focus changes without an X11 event in the stack are ignored by
the on screen keyboard.

https://bugzilla.gnome.org/show_bug.cgi?id=664309

js/ui/keyboard.js

index 57e4db4274e0fa0eb509caa59e0c9adf646ff82e..6a4d50833d8617a78b8c523f1512c38c8a4e3e88 100644 (file)
@@ -201,7 +201,7 @@ const Keyboard = new Lang.Class({
 
         this.actor = null;
 
-        this._timestamp = global.get_current_time();
+        this._timestamp = global.display.get_current_time_roundtrip();
         Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._redraw));
 
         this._keyboardSettings = new Gio.Settings({ schema: KEYBOARD_SCHEMA });
@@ -494,15 +494,30 @@ const Keyboard = new Lang.Class({
             this._moveTemporarily();
     },
 
+    // _compareTimestamp:
+    //
+    // Compare two timestamps taking into account
+    // CURRENT_TIME (0)
+    _compareTimestamp: function(one, two) {
+        if (one == two)
+            return 0;
+        if (one == Clutter.CURRENT_TIME)
+            return 1;
+        if (two == Clutter.CURRENT_TIME)
+            return -1;
+        return one - two;
+    },
+
     // D-Bus methods
     Show: function(timestamp) {
         if (!this._enableKeyboard)
             return;
 
-        if (timestamp - this._timestamp < 0)
+        if (this._compareTimestamp(timestamp, this._timestamp) < 0)
             return;
 
-        this._timestamp = timestamp;
+        if (timestamp != Clutter.CURRENT_TIME)
+            this._timestamp = timestamp;
         this.show();
     },
 
@@ -510,10 +525,11 @@ const Keyboard = new Lang.Class({
         if (!this._enableKeyboard)
             return;
 
-        if (timestamp - this._timestamp < 0)
+        if (this._compareTimestamp(timestamp, this._timestamp) < 0)
             return;
 
-        this._timestamp = timestamp;
+        if (timestamp != Clutter.CURRENT_TIME)
+            this._timestamp = timestamp;
         this.hide();
     },